package jzbank.service.impl;
import jzbank.common.exception.SyncException;
import jzbank.dao.serializabledao.DataExportDao;
import jzbank.dao.serializabledao.DatabaseConfigDao;
import jzbank.dao.serializabledao.FTPInstanceDao;
import jzbank.pojo.comfig.DatabasePO;
import jzbank.pojo.comfig.FTPInstancePO;
import jzbank.pojo.dto.DataExportDTO;
import jzbank.pojo.from.DataExportTask;
import jzbank.service.DataExportService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.UUID;

/**
 * 数据库跑批任务调用（业务层）
 * admin（闫鹏）
 */
@Service
public class DataExportServiceImpl implements DataExportService {


    @Autowired
    private DataExportDao dataExportDao;

    @Autowired
    private FTPInstanceDao ftpInstanceDao;

    @Autowired
    private DatabaseConfigDao databaseConfigDao;


    @Override
    public void createDataExportTask(DataExportTask dataExportTask) {
        //1. 查看数据库中是否有重复的 Task信息
        dataExportTask.setTid(UUID.randomUUID().toString());
        List<DataExportDTO> allDataExport = dataExportDao.getAllDataExport();
        for (DataExportDTO dataExportDTO : allDataExport) {
            if (dataExportDTO.getTid().equals(dataExportTask.getTid())){
                throw new SyncException("添加失败任务id重复!");
            }
            if (dataExportDTO.getTaskCode().equals(dataExportTask.getTaskCode())){
                throw new SyncException("添加失败任务代码重复！");
            }
            if (dataExportDTO.getTaskName().equals(dataExportTask.getTaskName())){
                throw new SyncException("添加失败任务名称重复！");
            }
        }
        DataExportDTO data=new DataExportDTO();
        //2. 查看是否需要FTP 需要的话检查FTPid是否为空
        if (dataExportTask.getIsEnableFtp().equals("1")){
            if (dataExportTask.getFtpId()!=null && !dataExportTask.getFtpId().equals("")){
                FTPInstancePO ftpInstancePoByFid = ftpInstanceDao.getFTPInstancePoByFid(dataExportTask.getFtpId());
                if (ftpInstancePoByFid.getFid()==null){
                    throw new SyncException("添加失败FTP不存在！");
                }else {
                    data.setFid(ftpInstancePoByFid.getFid());
                    data.setFtpIp(ftpInstancePoByFid.getFtpIp());
                    data.setFtpPassword(ftpInstancePoByFid.getFtpPassword());
                    data.setFtpPath(ftpInstancePoByFid.getFtpPath());
                    data.setFtpPort(ftpInstancePoByFid.getFtpPort());
                    data.setFtpUserName(ftpInstancePoByFid.getFtpUserName());
                }
            }else {
                throw new SyncException("添加失败若使用FTP，请选择FTP参数组！");
            }
        }
        //3. 查找数据库，把数据库需要的参数查过来
        if (dataExportTask.getDbId()!=null&& !dataExportTask.equals("")){
            DatabasePO database = databaseConfigDao.getDatabasePoByDbId(dataExportTask.getDbId());
            if (database.getDbId()==null){
                throw new SyncException("添加失败数据库配置组不存在！");
            }else {
                data.setDbId(database.getDbId());
                data.setDbIp(database.getDbIp());
                data.setDbUserName(database.getDbUserName());
                data.setDbPassWord(database.getDbPassWord());
                data.setDbClientName(database.getDbClientName());
            }
        }else {
            throw new SyncException("添加失败，请选择数据库参数组！");
        }
        //4. 复制属性创建任务
        // 设置data对象的属性值
        data.setTid(dataExportTask.getTid());
        data.setTaskName(dataExportTask.getTaskName());
        data.setTaskCode(dataExportTask.getTaskCode());
        data.setJobClass(dataExportTask.getJobClass());
        data.setJobGroup(dataExportTask.getJobGroup());
        data.setCron(dataExportTask.getCron());
        data.setDelStatus(dataExportTask.getDelStatus());
        data.setCreateTime(dataExportTask.getCreateTime());
        data.setDataExportPath(dataExportTask.getDataExportPath());
        data.setDataFileKeepTime(dataExportTask.getDataFileKeepTime());
        data.setSysNum(dataExportTask.getSysNum());
        data.setExportShell(dataExportTask.getExportShell());
        data.setIsCreateCtl(dataExportTask.getIsCreateCtl());
        data.setTableName(dataExportTask.getTableName());
        data.setTableIsIncrements(dataExportTask.getTableIsIncrements());
        data.setIsEnableFtp(dataExportTask.getIsEnableFtp());
        dataExportDao.addDataExport(data);
    }

    @Override
    public void deleteDataExportTaskById(String id) {
        // 调用Dao层方法，根据ID删除数据
        DataExportDTO dataExportId = dataExportDao.getDataExportId(id);
        if (dataExportId.getTid()!=null&& !dataExportId.getTid().equals("")){
            if (dataExportId.getDelStatus().equals("1")){
                throw new SyncException("数据删除失败！任务正在运行！");
            }
            dataExportDao.deleteDataExport(id);
        }else {
            throw new SyncException("数据不存在！删除失败！");
        }
    }

    @Override
    public DataExportDTO selectDataExportTaskById(String id) {
        DataExportDTO dataExportDTO = dataExportDao.getDataExportId(id);
        return dataExportDTO;
    }

    @Override
    public List<DataExportDTO> selectAllDataExportTask() {
        List<DataExportDTO> dataExportDTOs = dataExportDao.getAllDataExport();
        return dataExportDTOs;
    }

    @Override
    public void updateDataExportTask(DataExportDTO dataExportDTO) {
        dataExportDao.updateDataExport(dataExportDTO);
    }

}
